package com.learn.io.nio;

import java.io.IOException;
import java.nio.channels.SelectionKey;

/**
 * nio处理的几口
 */
public interface NioHandler {

    /**
     * 接收一个SocketChannel的处理
     *
     * @param key 向Selector注册Channel时，register()返回的SelectionKey对象
     *             这个对象包括：
     *                  interest集合（int interestSet = selectionKey.interestOps()）
     *                  ready集合（int readySet = selectionKey.readyOps()）
     *                      或者 --  selectionKey.isAcceptable();
     *                               selectionKey.isConnectable();
     *                               selectionKey.isReadable();
     *                               selectionKey.isWritable();
     *                  Channel（Channel  channel  = selectionKey.channel()）
     *                  Selector（Selector selector = selectionKey.selector()）
     *                  附加的对象（可选）（Object attachedObj = selectionKey.attachment()）
     * @throws IOException IO异常
     */
    void handleAccept(SelectionKey key) throws IOException;

    /**
     * 从一个SocketChannel读取信息的处理
     *
     * @param key 同上
     * @throws IOException IO异常
     */
    void handleRead(SelectionKey key) throws IOException;

    /**
     * 向一个SocketChannel写入信息的处理
     *
     * @param key 同上
     * @throws IOException IO异常
     */
    void handleWrite(SelectionKey key) throws IOException;
}
